package com.hugeyurt.headers;

import com.rabbitmq.client.*;

import java.util.HashMap;
import java.util.Map;

public class ProducerHeaders {
    //private final static String QUEUE_NAME = "my_queue_headers";
    private final static String exchange_name = "my_exchange_headers2";

    public static void main(String[] args)
    {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost"); // RabbitMQ服务器地址
        factory.setUsername("guest"); // 默认用户名
        factory.setPassword("guest"); // 默认密码
        factory.setPort(5672);//设置端口号

        try
        {
            //创建连接对象
            Connection connection = factory.newConnection();
            //创建信道
            Channel channel = connection.createChannel();
            //创建交换机
            /*
              1 交换机名称
              2、交换机类型： direct,topic,fanout及 headers
              3、指定交换机是否持久化，true 持久化，否则是false
              4  没有队列绑定时是否需要删除，false 不删除
              5  Map<String,Object> 交换机的其他结构化参数，这里设置为null
             */
             channel.exchangeDeclare(exchange_name, BuiltinExchangeType.HEADERS,false,false,null );

            // 3. 定义绑定规则（Headers匹配条件）

            // 4. 定义消息Headers（匹配条件）

            Map<String, Object> headers = new HashMap<>();
            headers.put("key1", "hugeyurt");
            headers.put("key2", "njupt");
            headers.put("format", "pdf");  // 附加业务字段
            // 5. 构建消息属性
            AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
                   .headers(headers).build();

            // 发布消息
            /*
              1、参数是指定交换机
              2、 队列名称
              3、其他参数信息，可以为null
              4、发送消息体，需要转换成字节
             */
            String message = "headers   Hello World!";
            channel.basicPublish(exchange_name, "",
                    properties,message.getBytes());

            System.out.println(" Sent '" + message + "'");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
